#ifndef __INTERFAZ_H
#define __INTERFAZ_H

#include "vector_piezas.h"
#include "color.h"
#include "acumulador.h"
/**
@brief Se encarga de cargar todos los datos del juego almacenados en los ficheros de configuracion
*/
class Interfaz{
	private:		
		/**
		@brief Vector de enteros encargado de almacenar todos los datos generales como la semilla,
		el tiempode espera, las lineas por nivel, nuero de piezas que contiene la cola. Dependiendo
		del archivo de configuracion tendra mas o menos datos.
		*/
		int datos_generales[20];
		/**
		@brief Numero de datos generales que recibe
		*/
		int num_datos_generales;
		/**
		@brief Numero de imagenes
		*/
		int numero_imagenes;
		/**
		@brief Vector de caracteres que guarda el directorio de las imagenes
		*/
		char* dir_imagenes;
		/**
		@brief Matriz donde se almacenan todos los nombres de las imagenes
		*/
		char** imagenes;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos del tablero:
		Posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_tablero[11];
		/**
		@brief Vector de enteros donde se guardan los siguientes datos de la cola de piezas:
		Posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_cola[11];	
		/**
		@brief Cadena de caracteres donde se almacena el mensaje del titulo
		*/
		char* titulo;
		/**
		@brief Cadena de caracteres donde se almacena la fuente del mensaje del titulo
		*/
		char* fuente_titulo;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos del titulo:
		Color de la letra, posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_titulo[16];
		/**
		@brief Cadena de caracteres donde se almacena la fuente del texto del nivel
		*/
		char* fuente_nivel;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos del nivel:
		Color de la letra, posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_nivel[16];
		/**
		@brief Cadena de caracteres donde se almacena la fuente del texto de las lineas
		*/
		char* fuente_lineas;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos de las lineas:
		Color de la letra, posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_lineas[16];
		/**
		@brief Cadena de caracteres donde se almacena la fuente del texto de las piezas
		*/
		char* fuente_piezas;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos de las piezas:
		Color de la letra, posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/			
		int datos_piezas[16];
		/**
		@brief Cadena de caracteres donde se almacena la fuente del texto del estado
		*/
		char* fuente_estado;
		/**
		@brief Vector de enteros donde se guardan los siguientes datos del estado:
		Color de la letra, posicion en lam ventana(fila,columna), ancho, alto y marco color del borde y del fondo.
		*/
		int datos_estado[16];
		/**
		@brief Numero de piezas que tendra el juego
		*/
		int num_piezas;
		/**
		@brief Vector de piezas donde se guardaran todas las piezas posiblesdel juego
		*/
		VectorPiezas vp;
		/**
		@brief Numero de filas que tendra el acumulador
		*/
		int fil_tablero;
		/**
		@brief Numero de columnas que tendra el acumulador
		*/
		int col_tablero;		
		/**
		@brief Acumulador del juego
		*/
		Acumulador acu;
		
		
	public:
		/**
     		@brief Constructor por valor
   		*/
		Interfaz(char* fich);
		/**
     		@brief Devuelve la semilla
    		@return Número correspondiente a la semilla
   		*/
		int Semilla()const;
		/**
     		@brief Devuelve el tiempo de espera inicial
    		@return Número correspondiente al tiempo de espera inicial
   		*/
		int TiempoEspera()const;
		/**
     		@brief Devuelve el número de lineas para pasar de nivel
    		@return Entero correspondiente al número de lineas para pasar nivel
   		*/
		int LineasNivel()const;
		/**
     		@brief Devuelve el número de piezas que tiene la cola de piezas
    		@return Número correspondiente al número de piezas que tiene la cola de piezas
   		*/
		int PiezasCola()const;
		/**
     		@brief Devuelve el número de imágenes que vamos a utilizar
    		@return Número correspondiente al número de imagenes que vamos a utilizar
   		*/
		int NumImagenes()const;
		/**
     		@brief Devuelve el directorio donde se encuentran las imágenes
    		@return Cadena de caracteres que corresponde al directorio donde se encuentran las imágenes
   		*/
		char* DirImagenes()const;
		/**
     		@brief Devuelve las imágenes que vamos a utilizar
    		@return Matriz que contiene todas las imágenes que tenemos que utilizar
   		*/
		char** Imagenes()const;
		/**
     		@brief Devuelve la posición X del acumulador
    		@return Número correspondiente a la posición X del acumulador
   		*/
		int PosXTablero()const;
		/**
     		@brief Devuelve la posición Y del acumulador
    		@return Número correspondiente a la posición Y del acumulador
   		*/
		int PosYTablero()const;
		/**
     		@brief Devuelve el ancho del acumulador en pixeles
    		@return Número correspondiente al ancho del acumulador
   		*/
		int AnchoTablero()const;
		/**
     		@brief Devuelve el alto del acumulador en pixeles
    		@return Número correspondiente al alto del acumulador
   		*/
		int AltoTablero()const;
		/**
     		@brief Devuelve el marco del acumulador en pixeles
    		@return Número correspondiente al marco del acumulador
   		*/
		int MarcoTablero()const;
		/**
     		@brief Devuelve el color del borde del acumulador
    		@return Color correspondiente al borde del acumulador
   		*/
		Color ColorBordeTablero()const;
		/**
     		@brief Devuelve el color del fondo del acumulador
    		@return Color correspondiente al fondo del acumulador
   		*/
		Color ColorFondoTablero()const;
		/**
     		@brief Devuelve la posición X de la cola de piezas
    		@return Número correspondiente a la posición X de la cola de piezas
   		*/
		int PosXCola()const;
		/**
     		@brief Devuelve la posición Y de la cola de piezas
    		@return Número correspondiente a la posición Y de la cola de piezas
   		*/
		int PosYCola()const;
		/**
     		@brief Devuelve el ancho de la cola de piezas en pixeles
    		@return Número correspondiente al ancho de la cola de piezas
   		*/
		int AnchoCola()const;
		/**
     		@brief Devuelve el alto de la cola de piezas en pixeles
    		@return Número correspondiente al alto de la cola de piezas
   		*/
		int AltoCola()const;
		/**
     		@brief Devuelve el marco de la cola de piezas en pixeles
    		@return Número correspondiente al marco de la cola de piezas
   		*/
		int MarcoCola()const;
		/**
     		@brief Devuelve el color del borde de la cola de piezas
    		@return Color correspondiente al borde de la cola de piezas
   		*/
		Color ColorBordeCola()const;
		/**
	     	@brief Devuelve el color del fondo de la colade piezas
    		@return Color correspondiente al fondo de la cola de piezas
   		*/
		Color ColorFondoCola()const;
		/**
	     	@brief Devuelve el titulo correspondiente al primer marcador
    		@return Cadena de caracteres que contiene el título del primer marcador
   		*/
		char* Titulo()const;		
		/**
	     	@brief Devuelve la fuente de la letra del título
    		@return Cadena de caracteres que contiene la fuente del título
   		*/
		char* FuenteTitulo()const;
		/**
	     	@brief Devuelve el tamaño del título
    		@return Número que corresponde al tamaño del título
   		*/
		int TamTitulo()const;
		/**
	     	@brief Devuelve el estilo del título
    		@return Número que corresponde el estilo del título
   		*/
		int EstiloTitulo()const;
		/**
	     	@brief Devuelve el color del de la letra deel título
    		@return Color correspondiente al título
   		*/
		Color ColorTitulo()const;
		/**
	     	@brief Devuelve la posición X del título
    		@return Número correspondiente a la posición X del título
   		*/
		int PosXTitulo()const;
		/**
	     	@brief Devuelve la posición Y del título
    		@return Número correspondiente a la posición Y del título
   		*/
		int PosYTitulo()const;
		/**
	     	@brief Devuelve el ancho del título en pixeles
    		@return Número correspondiente al ancho del título
   		*/
		int AnchoTitulo()const;
		/**
	     	@brief Devuelve el alto del título en pixeles
    		@return Número correspondiente al alto del título
   		*/
		int AltoTitulo()const;
		/**
	     	@brief Devuelve el marco del título en pixeles
    		@return Número correspondiente al marco del título
   		*/
		int MarcoTitulo()const;
		/**
	     	@brief Devuelve el color del borde del título
    		@return Color correspondiente al borde del título
   		*/
		Color ColorBordeTitulo()const;
		/**
	     	@brief Devuelve el color del fondo del título
    		@return Color correspondiente al fondo del título
   		*/
		Color ColorFondoTitulo()const;
		/**
	     	@brief Devuelve la fuente del texto del nivel
    		@return Cadena de caracteres correspondiente a la fuente del texto del nivel
   		*/
		char* FuenteNivel()const;
		/**
	     	@brief Devuelve el tamaño del texto del nivel
    		@return Número correspondiente al tamaño del texto del nivel
   		*/
		int TamNivel()const;
		/**
	     	@brief Devuelve el estilo del texto del nivel
    		@return Número correspondiente al estilo del texto del nivel
   		*/
		int EstiloNivel()const;
		/**
	     	@brief Devuelve el color del texto del nivel
    		@return Color correspondiente texto del nivel
   		*/
		Color ColorNivel()const;
		/**
	     	@brief Devuelve la posición X del nivel
    		@return Número correspondiente a la posición X del nivel
   		*/
		int PosXNivel()const;
		/**
	     	@brief Devuelve la posición Y del nivel
    		@return Número correspondiente a la posición Y del nivel
   		*/
		int PosYNivel()const;
		/**
	     	@brief Devuelve el ancho del nivel en pixeles
    		@return Número correspondiente al ancho del nivel
   		*/
		int AnchoNivel()const;
		/**
	     	@brief Devuelve el alto del nivel en pixeles
    		@return Número correspondiente al alto del nivel
   		*/
		int AltoNivel()const;
		/**
	     	@brief Devuelve el marco del nivel en pixeles
    		@return Número correspondiente al marco del nivel
   		*/
		int MarcoNivel()const;
		/**
	     	@brief Devuelve el color del borde del nivel
    		@return Color correspondiente al borde del nivel
   		*/
		Color ColorBordeNivel()const;
		/**
	     	@brief Devuelve el color del fondo del nivel
    		@return Color correspondiente al fondo del nivel
   		*/
		Color ColorFondoNivel()const;
		/**
	     	@brief Devuelve la fuente del texto de las lineas
    		@return Cadena de caracteres correspondiente a la fuente del texto de las lineas
   		*/
		char* FuenteLineas()const;
		/**
	     	@brief Devuelve el tamaño del texto de las lineas
    		@return Número correspondiente al tamaño del texto de las lineas
   		*/
		int TamLineas()const;
		/**
	     	@brief Devuelve el estilo del texto de las lineas
    		@return Número correspondiente al estilo del texto de las lineas
   		*/
		int EstiloLineas()const;
		/**
	     	@brief Devuelve el color del texto de las lineas
    		@return Color correspondiente texto de las lineas
   		*/
		Color ColorLineas()const;
		/**
	     	@brief Devuelve la posición X de las lineas
    		@return Número correspondiente a la posición X de las lineas
   		*/
		int PosXLineas()const;
		/**
	     	@brief Devuelve la posición Y de las lineas
    		@return Número correspondiente a la posición Y de las lineas
   		*/
		int PosYLineas()const;
		/**
	     	@brief Devuelve el ancho de las lineas en pixeles
    		@return Número correspondiente al ancho de las lineas
   		*/
		int AnchoLineas()const;
		/**
	     	@brief Devuelve el alto de las lineas en pixeles
    		@return Número correspondiente al alto de las lineas
   		*/
		int AltoLineas()const;
		/**
	     	@brief Devuelve el marco de las lineas en pixeles
    		@return Número correspondiente al marco de las lineas 
   		*/
		int MarcoLineas()const;
		/**
	     	@brief Devuelve el color del borde de las lineas
    		@return Color correspondiente al borde de las lineas
   		*/
		Color ColorBordeLineas()const;
		/**
	     	@brief Devuelve el color del fondo del nivel
    		@return Color correspondiente al fondo del nivel
   		*/
		Color ColorFondoLineas()const;
		/**
	     	@brief Devuelve la fuente del texto de las piezas
    		@return Cadena de caracteres correspondiente a la fuente del texto de las piezas
   		*/
		char* FuentePiezas()const;
		/**
	     	@brief Devuelve el tamaño del texto de las piezas
    		@return Número correspondiente al tamaño del texto de las piezas
   		*/
		int TamPiezas()const;
		/**
	     	@brief Devuelve el estilo del texto de las piezas
    		@return Número correspondiente al estilo del texto de las piezas
   		*/
		int EstiloPiezas()const;
		/**
	     	@brief Devuelve el color del texto de las piezas
    		@return Color correspondiente texto de las piezas
   		*/
		Color ColorPiezas()const;
		/**
	     	@brief Devuelve la posición X de las piezas
    		@return Número correspondiente a la posición X de las piezas
   		*/
		int PosXPiezas()const;
		/**
	     	@brief Devuelve la posición Y de las piezas
    		@return Número correspondiente a la posición Y de las piezas
   		*/
		int PosYPiezas()const;
		/**
	     	@brief Devuelve el ancho de las piezas en pixeles
    		@return Número correspondiente al ancho de las piezas
   		*/
		int AnchoPiezas()const;
		/**
	     	@brief Devuelve el alto de las piezas en pixeles
    		@return Número correspondiente al alto de las piezas
   		*/
		int AltoPiezas()const;
		/**
	     	@brief Devuelve el marco de las piezas en pixeles
    		@return Número correspondiente al marco de las piezas
   		*/
		int MarcoPiezas()const;
		/**
	     	@brief Devuelve el color del borde de las piezas
    		@return Color correspondiente al borde de las piezas
   		*/
		Color ColorBordePiezas()const;
		/**
	     	@brief Devuelve el color del fondo de las piezas
    		@return Color correspondiente al fondo de las piezas
   		*/
		Color ColorFondoPiezas()const;
		/**
	     	@brief Devuelve la fuente del texto del estado
    		@return Cadena de caracteres correspondiente a la fuente del texto del estado
   		*/
		char* FuenteEstado()const;
		/**
	     	@brief Devuelve el tamaño del texto del estado
    		@return Número correspondiente al tamaño del texto del estado
   		*/
		int TamEstado()const;
		/**
	     	@brief Devuelve el estilo del texto del estado
    		@return Número correspondiente al estilo del texto del estado
   		*/
		int EstiloEstado()const;
		/**
	     	@brief Devuelve el color del texto del estado
    		@return Color correspondiente texto del estado
   		*/
		Color ColorEstado()const;
		/**
	     	@brief Devuelve la posición X del estado
    		@return Número correspondiente a la posición X del estado
   		*/
		int PosXEstado()const;
		/**
	     	@brief Devuelve la posición Y del estado
    		@return Número correspondiente a la posición Y del estado
   		*/
		int PosYEstado()const;
		/**
	     	@brief Devuelve el ancho del estado en pixeles
    		@return Número correspondiente al ancho del estado
   		*/
		int AnchoEstado()const;
		/**
	     	@brief Devuelve el alto del estado en pixeles
    		@return Número correspondiente al alto del estado
   		*/
		int AltoEstado()const;
		/**
	     	@brief Devuelve el marco del estado en pixeles
    		@return Número correspondiente al marco del estado
   		*/
		int MarcoEstado()const;
		/**
	     	@brief Devuelve el color del borde del estado
    		@return Color correspondiente al borde del estado
   		*/
		Color ColorBordeEstado()const;
		/**
	     	@brief Devuelve el color del fondo del estado
    		@return Color correspondiente al fondo del estado
   		*/
		Color ColorFondoEstado()const;
		/**
	     	@brief Devuelve el Número de piezas
    		@return  Número de piezas que necesitamos
   		*/
		int NumPiezas()const;
		/**
	     	@brief Devuelve un vector de piezas ya relleno
    		@return Vector de piezas que contiene todas las piezas necesarias
   		*/
		VectorPiezas& Vector();
		/**
	     	@brief Devuelve el Número de filas del acumulador
    		@return  Número de filas del acumulador
   		*/	
		int FilasAcumulador()const;
		/**
	     	@brief Devuelve el Número de columnas del acumulador
    		@return  Número de columnas del acumulador
   		*/
		int ColumnasAcumulador()const;
		/**
	     	@brief Devuelve el acumulador ya inicializado
    		@return  Acumulador inicializado
   		*/
		Acumulador& Acu();
		/**
	     	@brief Destructor
   		*/
		~Interfaz();
		
};
#endif
